#ifndef _DAHUA_HD_H_
#define _DAHUA_HD_H_

#include "Types.h"
#include "Defs.h"

#ifdef __cplusplus
extern "C"
{
#endif

/// hd接口返回的错误值
enum hd_error{
	BAD_TARGET = -2, 		/* For ata driver */
	ATA_BUS_ERROR = -3,
	TIMEOUT	= -4,
	MEDIA_ERROR	= -5,
};

enum UPDATE_TYPE{

	FDISK = 0, /* 更新分区信息*/
	PLUG = 1, /*更新插入磁盘信息*/
	PLUG_OUT = 2, /*更新拔去磁盘信息*/
};

///更新磁盘相关信息
/// \param [in] dev 磁盘名称eg:/dev/sda
/// \param[in] type 更新磁盘信息的内容
/// \retval = 0 更新成功
/// \retval < 0更新失败
int PAL_API UpdateDiskInfo(const char *dev,enum UPDATE_TYPE type);

/// 获取磁盘容量
/// \param [in] dev 磁盘名称eg:/dev/sda
/// \retval  无
uint64 PAL_API HdGetDiskCapacity(const char* dev);

/// 获取磁盘相关信息
/// \param 无
/// \retval  无
void PAL_API HdGetDiskInfo(void);

void PAL_API HdCleanup(void);

/// 获取磁盘分区大小
/// \param [in] dev 磁盘分区名称eg:/dev/sda1
/// \retval = 0  获取失败
/// \retval > 0 获取到的磁盘分区大小，单位byte
int64 PAL_API HdGetPartitionSize(const char *dev);

/// 读磁盘数据，不保证线程安全
/// \param [in] dev 磁盘或者磁盘分区名称eg:/dev/sda or /dev/sda1
/// \param [in] offset 磁盘或者分区上的偏移量
/// \param [in] buff 缓冲区数据指针
/// \param [in] len 读取的字节数
/// \retval < 0  读取失败
/// \retval = 0 读取成功
int PAL_API HdRead(const char *dev, int64 offset, void *buff, int32 len);

/// 写磁盘数据，不保证线程安全
/// \param [in] dev 磁盘或者磁盘分区名称eg:/dev/sda or /dev/sda1
/// \param [in] offset 磁盘或者分区上的偏移量
/// \param [in] buff 缓冲区数据指针
/// \param [in] len 写入的字节数
/// \retval < 0  写入失败
/// \retval = 0  写入成功
int PAL_API HdWrite(const char *dev, int64 offset, const void *buff, int32 len);

/// 校验磁盘数据，不保证线程安全
/// \param [in] dev 磁盘或者磁盘分区名称eg:/dev/sda or /dev/sda1
/// \param [in] offset 磁盘或者分区上的偏移量
/// \param [in] len 校验的字节数
/// \retval < 0  校验失败
/// \retval = 0 校验成功
int PAL_API HdVerify(const char *dev, int64 offset, int32 len);

/// 修复磁盘数据，不保证线程安全
/// \param [in] dev 磁盘或者磁盘分区名称eg:/dev/sda or /dev/sda1
/// \param [in] offset 磁盘或者分区上的偏移量
/// \param [in] len 校验的字节数
/// \retval < 0  校验失败
/// \retval = 0 校验成功
int PAL_API HdRepair(const char *dev, int64 offset, int32 len);

int PAL_API HdFlushCache(const char *dev);

int PAL_API HdDisableCache(const char *dev);

int PAL_API HdEnableCache(const char *dev);

#ifdef __cplusplus
}
#endif

#endif
